'use strict';

const Controller = require('egg').Controller;
/**
 * @controller adminHomeController 首页-后台管理
 */
// 引入crypto
const crypto = require('crypto');
class HomeController extends Controller {

    /**  
     * @summary 首页
     * @description 录页
     * @router GET /admin
     * @response 200 user 返回结果。（ 对应 contract 里面的验证属性，下面会提到 。）
     */
    async index() {
        let {
            ctx
        } = this
        let toast = ctx.cookies.get('toast', {
            encrypt: true
        })
        toast = toast ? JSON.parse(toast) : null
        await ctx.render('admin/home/index.html', {
            toast
        })
    }




    /**  
     * @summary 管理员登录页
     * @description 管理员登录页
     * @router GET /admin/home/login
     * @response 200 user 返回结果。（ 对应 contract 里面的验证属性，下面会提到 。）
     */
    async login() {
        let {
            ctx
        } = this
        let toast = ctx.cookies.get('toast', {
            encrypt: true
        })
        toast = toast ? JSON.parse(toast) : null
        await ctx.render('admin/home/login.html', {
            toast
        })
    }
    /**  
     * @summary 管理员登录
     * @description 管理员登录
     * @router post /admin/home/loginevent 
     * * @request username string *username xxxx
     * * @request password string *password xxxx
     * @response 200 user 返回结果。（ 对应 contract 里面的验证属性，下面会提到 。）
     */
    async loginevent() {
        // 结构
        let {
            ctx,
            app
        } = this
        // 参数验证
        ctx.validate({
            username: {
                type: 'string',
                required: true,
                desc: '用户名'
            },
            password: {
                type: 'string',
                required: true,
                desc: '密码'
            }
        })
        // 获取参数
        let {
            username,
            password
        } = ctx.request.body
        // 查询用户是否存在 /no -toast
        let manager = await app.model.Manager.findOne({
            where: {
                username
            }
        })
        if (!manager) {
            return ctx.throw(400, '用户不存在')
        }
        // 验证密码
        await ctx.checkPassword(password, manager.password)
        // 设置session 记录用户到session中
        console.log(manager)
        console.log(JSON.parse(JSON.stringify(manager)))
        ctx.session.user = manager
        console.log(ctx.session.user)

        // 成功后的跳转
        return ctx.apiSuccess('ok')

    }
    // async checkPassword(password, hash_password) {
    //     // 先对需要验证的密码进行加密
    //     const hmac = crypto.createHash("sha256", this.app.config.crypto.secret);
    //     hmac.update(password);
    //     password = hmac.digest("hex");
    //     let res = password === hash_password;
    //     if (!res) {
    //         this.ctx.throw(400, '密码错误');
    //     }
    //     return true;
    // }
    /**  
     * @summary 退出登录
     * @description 退出登录
     * @router post /admin/home/logout
     * @response 200 user 返回结果。（ 对应 contract 里面的验证属性，下面会提到 。）
     */
    async logout() {
        let {
            ctx
        } = this
        // 清除缓存
        ctx.session.user = null
        ctx.toast('退出登录成功', 'success')
        ctx.redirect('/admin/login')
    }
}

module.exports = HomeController;